// 解构赋值，引入gulp的功能
const {src, dest, watch, parallel} = require("gulp");
const concat = require("gulp-concat");
const rename = require("gulp-rename");
const uglify = require("gulp-uglify");
const babel = require("gulp-babel");
const connect = require('gulp-connect');
const { createProxyMiddleware } = require('http-proxy-middleware');

// 拷贝文件功能
function copyFn(){
    // 找文件：入口文件夹名：src
    return src(["./src/*.{html,css}"])      // 路径的多种表示方式
    // 转存文件：出口文件夹名：dist
    .pipe(dest("./dist"))
    // 拷贝之后，执行服务器插件的刷新功能
    .pipe(connect.reload())
}
// 暴露指令
exports.copy = copyFn;

// js文件合并，编译，压缩，改名功能
function jsHandleFn(){
    return src("./src/js/*.js")         // 找文件
    .pipe(concat("all.js"))             // 合并
    .pipe(babel({
        presets: ['@babel/env']
    }))                                 // ES6转ES5
    .pipe(dest("./dist/js"))            // 转存
    .pipe(uglify())                     // 压缩
    .pipe(rename("all.min.js"))         // 改名
    .pipe(dest("./dist/js"))            // 转存
}
// 暴露指令
exports.jh = jsHandleFn;


// 开启服务器功能
function serverFn(next){
    connect.server({
        root: "dist",
        port: 3001,
        livereload: true,
        // 给服务器插件添加第三方中间件
        middleware: function(connect, opt) {
            return [
                // 服务器代理的中间件
                createProxyMiddleware('/abc', {
                    target:'https://news.baidu.com', //代理的目标地址
                    changeOrigin:true,
                    pathRewrite:{    //路径重写规则
                        '^/abc':''
                    }
                })
            ]
        }
    })
    next();
}
exports.server = serverFn;

// 开启监听功能
function watchFn(next){
    watch(["./src/*.{html,css}"], copyFn);
    next();
}

// 批处理：服务器和监听
exports.watchServer = parallel(serverFn, watchFn);


